//============================================================================
// Name        : AbsListItr.h
// Author      : bycy
// Version     : 1.0
// Description : 
//============================================================================

template < class Type >
class AbsListItr{

public:

	AbsListItr(const AbsList< Type > &L){};

	AbsListItr(const AbsListItr&);

	
	/* 
	* Deconstruct an AbsListItr
	* 
	* REQUIRE:
	*	
	* RETURN:	
	*
	* NOTES:	
	*/
	
	virtual ~AbsListItr();

	/* 
	* Insert an elment into this AbsListItr
	* 
	* REQUIRE:	x NOT NULL
	*	
	* RETURN:	
	*
	* NOTES:	
	*/

	virtual void Insert(const Type & x) = 0;

	/* 
	* Remove an elment from this AbsListItr
	* 
	* REQUIRE:	x NOT NULL
	*	
	* RETURN:	index if this AbsListItr contains x
	*		-1 if this AbsListItr does not contain x
	*
	* NOTES:	
	*/

	virtual int Remove(const Type & x) = 0;

	/* 
	* Look for an elment in this AbsListItr
	* 
	* REQUIRE:	x NOT NULL
	*	
	* RETURN:	index if this AbsListItr contains x
	*		-1 if this AbsListItr does not contain x
	*
	* NOTES:	
	*/

	virtual int Find(const Type & x) = 0;

	virtual int IsFound(const Type & x) const = 0;

	virtual int operator + () const = 0;

	virtual const Type & operator() () const = 0;
	
	virtual void Zeroth() = 0;

	virtual void First() = 0;

	virtual void operator ++ () = 0;

	virtual void operator ++ (int) = 0 ;

protected:

	AbsListItr(){};

};